package main

import (
	"embed"
	_ "embed"
	"log"
	"log/slog"

	"LeagueBard/backend/client"
	"LeagueBard/backend/program"

	"github.com/wailsapp/wails/v3/pkg/application"
)

// Wails 使用 Go 的 `embed` 包将前端文件嵌入二进制程序
// 所有 frontend/dist 目录中的文件都会被嵌入到二进制文件中
// 并可供前端使用
// 更多信息参见：https://pkg.go.dev/embed

//go:embed all:frontend/dist
var assets embed.FS

// main 函数是应用程序的入口点，负责初始化应用、创建窗口
// 启动每秒发送时间事件的协程，最后运行应用程序并记录可能发生的错误
func main() {
	// 创建新的 Wails 应用并配置选项
	// 'Name' 和 'Description' 用于应用元数据
	// 'Assets' 配置资源服务器指向前端文件
	// 'Services' 包含需要绑定到前端的服务实例
	// 'Mac' 选项用于 macOS 系统特有配置
	app := application.New(application.Options{
		Name:        "LeagueBard",
		Description: "A demo of using raw HTML & CSS",
		LogLevel:    slog.LevelWarn,
		Services: []application.Service{
			application.NewService(&client.ClientFunc{}),
			application.NewService(&program.ProgramFunc{}),
		},
		Assets: application.AssetOptions{
			Handler: application.AssetFileServerFS(assets),
		},
		Mac: application.MacOptions{
			ApplicationShouldTerminateAfterLastWindowClosed: true,
		},
	})

	// 创建带配置选项的新窗口
	// 'Title' 设置窗口标题
	// 'Mac' 包含 macOS 系统特有窗口配置
	// 'URL' 指定加载到 webview 中的初始页面
	app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
		Title:     "LeagueBard",
		Width:     1266,
		Height:    708,
		MinWidth:  1266,
		MinHeight: 708,
		Frameless: true,
		Mac: application.MacWindow{
			InvisibleTitleBarHeight: 50,
			Backdrop:                application.MacBackdropTranslucent,
			TitleBar:                application.MacTitleBarHiddenInset,
		},
		URL: "/",
	})

	go client.GetClientRunning(app)

	// 运行应用程序，该方法会阻塞直到程序退出
	err := app.Run()

	// 如果运行应用时发生错误，记录并退出
	if err != nil {
		log.Fatal(err)
	}
}
